문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 캐시 메모리 (문단 편집) === 작동 원리: 데이터 지역성 === 캐시 메모리는 '''데이터 지역성(Locality)'''의 원리를 이용한다. 데이터 지역성은 시간 지역성(Temporal locality), 공간 지역성(Spatial Locality), 순차적 지역성(Sequential Locality)으로 나뉘는데, 시간 지역성이란 for나 while 같은 반복문에 사용하는 조건 변수처럼 한번 참조된 데이터는 잠시 후에 또 참조될 가능성이 높다는 것이고, 공간 지역성이란 A[0], A[1]과 같은 데이터 배열에 연속으로 접근할 때 참조된 데이터 근처에 있는 데이터가 잠시 후에 사용될 가능성이 높다는 것이며, 순차적 지역성이란 분기(branch)가 발생하는 [[비순차적 실행]]이 아닌 이상 명령어들이 메모리에 저장된 순서대로 실행하는 특성을 이용한 원리로 순차적일 수록 다음 순서의 데이터가 사용될 가능성이 높다. 쉽게 예를 들자면 무지하게 지랄맞고 부지런한 상사가 한 시간 전에 작년과 금년 재무결산 보고서를 가져오라고 했을 때, 어차피 순서대로 정리되어 있는 내년과 내후년 재무결산보고서도 가져오라고 할지 모르니까 그것도 묶음째로 근처에 준비해 놓는 식이다. 또 다른 예로는 캐시는 [[지갑]]이라고 생각하면 된다. 지갑 혹은 주머니가 없다면 우리가 [[현금]](Cash)이 필요할 때마다 매번 [[은행]]이나 [[현금 자동 입출금기|ATM]]에 가야 할 것이다. 이는 당연히 매우 귀찮고 시간도 많이 걸린다. 하지만 우리가 현금을 지갑에 넣고 다님으로써 시간을 절약할 수 있다. [[CPU]]가 메모리에 데이터를 요청할 때, DRAM에 접근하기 전에 일단 캐시 메모리에 접근하여 데이터 존재 여부를 확인한다. 캐시 메모리는 메인 메모리인 [[DRAM]]보다는 그 사이즈가 매우 작아서 데이터를 모두 저장할 수 없다. [[DRAM]]이 보통 수 GB 단위 정도인데 인텔 i5, i7에 들어가는 캐시 메모리는 작게는 수 KB ~ 많게는 수 MB 정도이다. 캐시 메모리는 DRAM의 데이터 일부를 가지고 있다가 CPU가 요청한 데이터가 캐시 메모리에 없으면 CPU를 잠시 기다리게 한 후 DRAM에서 해당 데이터를 가져온 후 CPU에게 넘겨 준다. CPU는 캐시의 존재를 알고 있지만, 그 위에서 실행되는 프로그램은 메인 메모리의 주소만 지정하거나 캐시 적중률을 위해 힌트를 줄 수는 있어도[* x86의 {{{cldemote}}}, {{{clflushopt}}}, {{{prefetchwt1}}} 등], 프로그래머가 캐시 메모리를 직접 지정할 수는 없다. 이렇게 그 존재가 외부에 드러나지 않기 때문에 캐시 메모리는 CPU에 투명(transparent)하다고 한다. 투명하지 않은 작은 온칩 메모리는 Scratchpad Memory라고 부른다. 캐시 메모리에 데이터를 저장할 때 공간 지역성을 최대한 활용하기 위해 해당 데이터뿐만 아니라 옆 주소의 데이터도 같이 가져와 미래에 쓰일 것을 대비한다. CPU의 경우, DRAM에는 프로그램을 수행하는 명령어(Instruction)와 그 명령이 실행되는 데이터(Data)가 함께 들어 있는데, 명령어는 읽기만 하고 데이터는 읽기와 쓰기를 동시에 하므로 캐시 메모리 내에 이들을 각각 명령어 캐시 메모리(Instruction Cache)와 데이터 캐시 메모리(Data Cache)에 저장한다. 보통 L1 캐시 메모리에는 명령어 캐시와 데이터 캐시 메모리가 따로 있고, L2 캐시 메모리는 딱히 둘의 구분 없이 하나의 캐시 메모리로 구성된다. L1 캐시 메모리는 CPU에 직접 데이터를 공급해 주기 때문에 빠른 접근 지연 시간(Access latency)이 매우 중요한데, 명령어는 보통 공간 지역성이 높고 데이터는 보통 시간 지역성이 높다. 이 둘을 나누어 서로 다른 지역성을 이용할 수 있다. 또한 명령어와 데이터를 동시에 읽어올 수 있게 함으로써 CPU의 파이프라이닝 성능을 향상시킬 수 있다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기